package com.time.company.utils;

import android.text.TextUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 验证手机格式
 * Created by Bing on 2016/9/3.
 * E-mail is tx16bing@163.com
 */
public class MobileUtils {

    // 验证码的type(1~9)
    private static int CODE_TYPE = 0;
    // 每一个type的使用次数是6次 0~5
    private static int CODE_TYPE_TIMES = 0;
    // 昨天的时间
    private static long preTime;

    /**
     * 验证手机格式
     */
    public static boolean isMobile(String number) {
    /*
    移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
    联通：130、131、132、152、155、156、185、186
    电信：133、153、180、189、（1349卫通）
    总结起来就是第一位必定为1，第二位必定为3或5或8或7，其他位置的可以为0-9
    */
        //"[1]"代表第1位为数字1，"[358]"代表第二位可以为3、5、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        String num = "[1][3587]\\d{9}";
        if (TextUtils.isEmpty(number)) {
            return false;
        } else {
            //matches():字符串是否在给定的正则表达式匹配
            return number.matches(num);
        }
    }

    /**
     * 判断邮箱是否合法
     *
     * @param email
     * @return
     */
    public static boolean isEmail(String email) {
        if (null == email || "".equals(email)) return false;
        //Pattern p = Pattern.compile("\\w+@(\\w+.)+[a-z]{2,3}"); //简单匹配
        Pattern p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");//复杂匹配
        Matcher m = p.matcher(email);
        return m.matches();
    }

    public static String getCodeType(String stateCode) {
        //当前的时间
        long nowTime = System.currentTimeMillis();
        if (!TimeUtils.isSameDay(preTime, nowTime)) {
            // 表示不同天
            CODE_TYPE = 0;
            CODE_TYPE_TIMES = 0;
        }
        // 把最新的时间赋值给上次的时间
        preTime = nowTime;

        if (CODE_TYPE_TIMES >= 5) {
            // 同一个type使用次数超过5次，type需要++
            CODE_TYPE++;
            CODE_TYPE_TIMES = 0;
        } else {
            CODE_TYPE_TIMES++;
        }

        if (TextUtils.equals(stateCode, "change")) {
            CODE_TYPE++;
            CODE_TYPE_TIMES = 0;
        }

        return String.valueOf(CODE_TYPE);
    }

}
